約 1,836,396 件
https://w.atwiki.jp/aerocats/pages/67.html
玄箱PROはHDDを取り付けなくても、内蔵されたフラッシュメモリである程度はNASとして作動する。 しかし、その構造上メモリへの書き込み回数に制限があるのでNANDフラッシュを酷使することは推奨できない。 構造 STMicroelectronics社のデータシートより。 玄箱PROからストレージとして扱う分には不要な項目もあるが、デバイスそのものの仕組みを知るには有用だと判断して掲載している。 基本データ メーカー STMicroelectronics 製品名 NAND02GW3B2C 容量 2Gb(256MB) バス x8 ページサイズ 2048+64バイト ブロックサイズ 128K+4Kバイト メモリ配列 64ページx2048ブロック ECC(Error Correct Code)用に各ページに64バイトのOOB(Out Of Band)が含まれている。 OOBの合計は8Mバイトになり、NAND02GW3B2Cの実質容量は264Mバイトとなる。 信号種別 信号名 概要 Inputs/Outputs(I/O0-I/O7) 選択されたアドレスを入力するか、出力モード時にデータを出力するか、または入力モード時にコマンドかデータを入力するのに使用される。入力はWrite Enableの立ち上がりでラッチされる。デバイスの選択が解除されるか、または出力に障害があるとき、I/O0-I/O7は浮いたままの状態になる。 Address Latch Enable(AL) Command Interfaceのアドレス入力のラッチを有効にする。ALがHighの場合、アドレス入力はWrite Enableの立ち上がりでラッチされる。 Command Latch Enable(CL) Command Interfaceのコマンド入力のラッチを有効にする。CLがHighの場合、コマンド入力はWrite Enableの立ち上がりでラッチされる。 Chip Enable(E) メモリコントロールロジック、入力バッファ、デコーダ、およびセンスアンプを活性化する。EがLowの場合に、デバイスは選択される。EがHighになっても、デバイスは選択されたままで残っていて、待ち受け状態を調べても、デバイスはbusyを示さない。 Read Enable(R) 出力モード時にシーケンシャルなデータ出力を制御する。データはRの立ち下がり後に有効となる。また、Rの立ち下がりは内部の列アドレス・カウンタを1つ増加する。 Write Enable(W) Command Interfaceへの入力と、アドレスおよびデータ入力のラッチを制御する。アドレスとデータの両方がWの立ち上がりでラッチされる。電源オン・オフ時、Command Interfaceがコマンドを受け入れる準備が完了するまでに10マイクロ秒の回復時間が必要となる。この間、WをHighに保つことをお勧めする。 Write Protect(WP) 求められていない書き込みか消去操作に対してハードウェア保護を与える入力ピン。WPがLowの場合は、デバイスはどんな書き込みや消去操作も受け入れない。電源オン・オフ時、WPをLowに保つことをお勧めする。 Ready/Busy(RB) P/E/Rコントローラーが現在アクティブであるかどうか特定するのに使用することができる開放型ドレイン。RBが、Lowである(読み込み)時は書き込みもしくは消去操作が進行している。操作が完了した時、Ready/BusyはHighになる。開放型ドレイン出力の使用にあたって、いくつかのメモリから単一のプルアップレジスタに接続することもできる。するとLowは、メモリの1つ(または以上)がbusyだと示すようになる。電源オン・オフ時、Command Interfaceがコマンドを受け入れる準備が完了するまでに10マイクロ秒の最小の回復時間が必要となる。この間、RBはLow。 モード操作 上記信号種別の相関関係を表にする。 EとRBはモード操作そのものに関係しないので省いた。 モード操作 E AL CL R W WP I/O0-7 コマンド入力 Low Low High High 立ち上がり X コマンド アドレス入力 Low High Low High 立ち上がり X アドレス データ入力 Low Low Low High 立ち上がり High データ入力 データ出力 Low Low Low 立ち下がり High X データ出力 アドレス入力 バスサイクル I/O7 I/O6 I/O5 I/O4 I/O3 I/O2 I/O1 I/O0 1st A7 A6 A5 A4 A3 A2 A1 A0 2nd Low Low Low Low A11 A10 A9 A8 3rd A19 A18 A17 A16 A15 A14 A13 A12 4th A27 A26 A25 A24 A23 A22 A21 A20 5th Low Low Low Low Low Low Low A28 8ビットの幅で5回のサイクルを費やすことでアドレスを入力している。 アドレス定義 アドレス 定義 A0-A11 列アドレス A12-A17 ページアドレス A18-A28 ブロックアドレス 11ビットで2048ブロックの1ブロックを指定する「ブロックアドレス」、6ビットで64ページの1ページを指定する「ページアドレス」、12ビットで2112バイトの1バイトを指定する「列アドレス」で、256Mバイト中の1バイトを指定している。 動作 NANDフラッシュメモリの基本動作とは以下のものがある。 読み書きはページ単位 消去はブロック単位 読み込みはシリアル ECC(Error Correct Code)格納用にOOB(Out Of Band)を持つ
https://w.atwiki.jp/aerocats/pages/24.html
シリアルコンソールを接続しtftpブートなどを試みた際、ブートに失敗し *** Warning no boot file name; using 960BA8C0.img Using egiga0 device TFTP from server (tftpサーバーのIPアドレス); our IP address is (玄箱PROのIPアドレス) Filename 960BA8C0.img . Load address 0x0 Loading * TFTP error File not found. (1) Starting again というエラーを繰り返す場合がある。 どのような状況でこのエラーが出現し、どのように対処すればいいのかを検証する。 960BA8C0.imgとは何か U-Boot.jpにU-Bootコマンドマニュアルがあり、その中で以下のような記述がある。 filename ロードするファイルです。 省略された場合は、環境変数bootfileの値、環境変数bootfileが設定されていない場合、 自分のIPアドレス .imgを使います。 自分のIPアドレス の部分は、IPアドレスを16進で表記して、並べたものです。例えば、192.168.3.202を16進で表記すると、C0.A8.03.CAとなりますので、"CA03A8C0.img"を探しに行きます。 つまり、U-Bootがロードすべきカーネルを自身により発見できなかった場合、「 自分のIPアドレス .img」というファイルをカーネルとして探すようになっている。 この際、「自分のIPアドレス」とは初期状態(正しくは『DHCPにより取得できなかった場合』)の「192.168.11.150」を指す。 上記のように、192.168.11.150を16進数で表記すると「960BA8C0」となる。 なぜ発生するのか ユーザーがカーネルを指定しているにもかかわらずU-Bootがカーネルを見つけることができない、という意味は「指定内容が間違っている」ということだ。 しかしそれ以外に、コンソールを接続する基板(ドーターボード)の不良でこのエラーが発生した事例もある。 U-bootの操作
https://w.atwiki.jp/aerocats/pages/22.html
玄箱PROの本体背面にある赤いボタンがRESETボタンだ。 動作内容 HDDの初期化シリアルコンソールでのログ telnetでのログ パーティションの状態 動作を追跡する エラー 動作内容 標準Linuxでのこのボタンの動作順序は以下となる。 システム起動時に/etc/init.d/rcSが/etc/init.d/Kevent.shを実行する /etc/init.d/Kevent.shが/usr/local/sbin/Keventdを起動する /usr/local/sbin/Keventdはデーモンとして常駐しカーネルイベントを参照、変化があっても無くても常にその結果を/usr/local/bin/KeventHandller.shに渡す その都度呼び出された/usr/local/bin/KeventHandller.shはLANの状態と、miconaplコマンドで電源ボタン・RESETボタンを監視しており、RESETボタンを押されたことを認識すると/usr/local/bin/InitDisk1.shを実行する これらの動作は標準Linuxで完備されており、独自にユーザーランドを構築した場合はこの機能は失われる。 必要であれば導入するしかない。 HDDの初期化 Linuxの形式に初期化されていなければRESETボタンの長押しでHDDの初期化が開始される。 シリアルコンソールでのログ ~ # SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back sda sda1 SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back sda sda1 XFS mounting filesystem sda1 ~ # telnetでのログ telnetではコンソール上には何も表示されない。ある程度のタイミングを見計らってmountコマンドででも確認すればいいだろう。 パーティションの状態 fdiskコマンド?で確認してみる。 ~ # fdisk /dev/sda The number of cylinders for this disk is set to 9729. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help) p Disk /dev/sda 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 9729 78148161 83 Linux Command (m for help) パーティション?は1つだけ切られている。デバイス名は「/dev/sda1」となる。 次にmountコマンドで確認する。 ~ # mount | grep sda1 /dev/sda1 on /mnt/disk1 type xfs (rw) ~ # xfs形式で/mnt/disk1にマウントされている。 動作を追跡する エラー RESETボタンを長押しすることで発生するエラーには以下のパターンがある。 KeventHandller.sh(InitDisk1.sh)が反応する既定のエラーだけを列記するので、独自に記述したシェルスクリプトなどは考慮しない。 (エラー)disk is already mounted! (エラー)disk is already formatted! (エラー)RESETボタンでの初期化中、INFO LEDが点滅して作業が中断する
https://w.atwiki.jp/aerocats/pages/49.html
標準Linuxの/etc/init.d/内にある。 スクリプト スクリプト詳細configure関数 set_defaultGw関数 set_defaultIp関数 set_defaultIf関数 set_dns関数 start関数 stop関数 スクリプト本体 スクリプト #!/bin/sh # # start/stop network deamons # # DHCPCD=/sbin/dhcpcd BASE=`basename $DHCPCD` LOCK=/var/lock/networking . /usr/local/bin/kuro_lib if [ -f /etc/netinfo ]; then . /etc/netinfo fi # for dhcpcd.exe export INTERFACE=$ENETNAME configure() { echo "create network files.." echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]" if [ "$my_ipaddress" = "" ]; then my_ipaddress=$DEFAULT_IP my_subnetmask=255.255.255.0 my_dgw= fi touch /etc/resolv.conf } set_defaultGw() { if [ "$my_dgw" = "" ]; then route del default else route add default gw $my_dgw fi } set_defaultIp() { echo "** setting default ip" /sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0 # delete default gw my_dgw= } set_defaultIf() { TMP=`cat /proc/net/route |awk {print $4} |grep 0003` if [ "$TMP" = "" ]; then echo "add default if" #route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME route add -net default $ENETNAME fi } set_dns() { echo "Configuration resolv.conf" cat /dev/null /etc/resolv.conf if [ "$my_dns1" != "" ]; then echo "nameserver $my_dns1" /etc/resolv.conf fi if [ "$my_dns2" != "" ]; then echo "nameserver $my_dns2" /etc/resolv.conf fi } start() { configure /sbin/ifconfig lo up killall $BASE rm -f /etc/dhcpc/dhcpcd-eth0.pid # delete default gw while do /sbin/route del default if [ $? -ne 0 ]; then break fi done sleep 1 echo "Configuration network interface lo $ENETNAME" ## ## change mtu (frame-size 1518,4100,7418) ## if [ "$mtu" = "4102" ] ; then mtu=4084 elif [ "$mtu" = "7422" ] ; then mtu=7404 elif [ "$mtu" = "9694" ] ; then mtu=9676 else mtu=1500 fi /sbin/ifconfig $ENETNAME mtu $mtu multicast if [ $? -ne 0 ]; then echo "mtu fail" /sbin/ifconfig $ENETNAME mtu 1500 multicast fi if [ "$my_ipaddress" = "dhcp" ]; then if [ "$my_dgw" != "" ]; then echo "--- set static dgw" DHCP_GW="-G $my_dgw" fi ## see also /etc/dhcpc/dhcpcd.exe echo "DHCPCSTATE=requesting" /var/tmp/dhcpcstate ## echo "requesting DHCP tout=30[s]" $DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME if [ $? -ne 0 ]; then echo "** dhcp fail" echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate set_defaultIp set_defaultGw # wait linkup delay sleep 4 fi else echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask" /sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask if [ $? -ne 0 ]; then set_defaultIp fi set_defaultGw set_dns fi ## set_defaultIf ## set ipaddress in /etc/hosts /etc/init.d/sethostname.sh #/usr/local/bin/change_notify.sh network } stop() { echo "Deconfiguration network interface lo $ENETNAME" killall $BASE /sbin/ifconfig $ENETNAME down /sbin/ifconfig lo down } # for NFS TMP=`grep /dev/root /proc/mounts|grep nfs` if [ "$TMP" != "" ]; then echo "nfs root mode. skip $ENETNAME network configuration." exit 0 fi # lock_file check lock_file create case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac lock_file delete exit 0 スクリプト詳細 ブロックごとに見てみる。 #!/bin/sh # # start/stop network deamons # # シェルにshを指定。ネットワークデーモンの開始/停止のコメント。 DHCPCD=/sbin/dhcpcd BASE=`basename $DHCPCD` LOCK=/var/lock/networking DHCPCDという変数を用意し、そこに/sbin/dhcpcdを代入。 BASEという変数を用意し、そこに basename /sbin/dhcpcd を代入。 LOCKという変数を用意し、そこに/var/lock/networkingを代入。 . /usr/local/bin/kuro_lib /usr/local/bin/kuro_libをサブシェルで走らせる。 kuro_lib内の DEFAULT_IP変数(=192.168.11.150) ENETNAME変数(=eth0) lock_file関数 を使用するためだ。 if [ -f /etc/netinfo ]; then /etc/netinfoが存在すれば(/etcにnetinfoというファイルがあれば)以下を実行。 . /etc/netinfo /etc/netinfoをサブシェルで走らせる。 netinfo内の my_ipaddress変数 my_subnetmask変数 my_dgw変数 my_dns1変数 my_dns2変数 mtu変数 を使用するためだ。 fi /etc/netinfoの存在の有無の条件分岐を終了。 # for dhcpcd.exe /etc/dhcpc/dhcpcd.exeのために、というコメント。 export INTERFACE=$ENETNAME 環境変数を設定するexportコマンドで、INTERFACE変数にeth0を代入している。 ここからは7つの関数の記述になる。 configure関数 configure() { configure関数の定義が始まる。 echo "create network files.." echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]" 画面に create network files.. IP=[IPアドレス値], netmask=[ネットマスク値], dgw=[デフォルトゲートウェイ値], dns1=[DNS1値], dns2=[DNS2値] と表示される。 if [ "$my_ipaddress" = "" ]; then my_ipaddress変数に何も設定されていなければ以下を実行。 my_ipaddress=$DEFAULT_IP my_subnetmask=255.255.255.0 my_dgw= my_ipaddress変数にDEFAULT_IP変数の値、my_subnetmask変数に255.255.255.0、my_dgw変数は空、とそれぞれの変数に値を代入。 fi my_ipaddress変数が空かどうかの条件分岐を終了。 touch /etc/resolv.conf /etcにresolv.confというファイルを作成。 } configure関数はここまで。 set_defaultGw関数 set_defaultGw() { set_defaultGw関数の定義ここから。 if [ "$my_dgw" = "" ]; then my_dgw変数が空であれば以下を実行。 route del default routeコマンド?でデフォルト経路情報を削除。 デフォルト経路とは、自分の経路情報に記録されていない宛て先のパケットを送るためのものだ。 一般的にはルーターを指す。 else my_dgw変数が空でなければ以下を実行。 route add default gw $my_dgw routeコマンド?で、デフォルト経路としてmy_dgw変数の内容を経路テーブルに追加。 fi my_dgw変数が空かどうかの条件分岐を終了。 } set_defaultGw関数はここまで。 set_defaultIp関数 set_defaultIp() { set_defaultIp関数はここから。 echo "** setting default ip" /sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0 画面上に「** setting default ip」と表示。 ifconfigコマンド?でeth0にDEFAULT_IP変数の値とnetmaskを255.255.255.0を設定。 # delete default gw my_dgw= デフォルトゲートウェイを削除する、というコメントの後にmy_dgw変数に空を代入している。 } set_defaultIp関数はここまで。 set_defaultIf関数 set_defaultIf() { set_defaultIf関数はここから。 TMP=`cat /proc/net/route |awk {print $4} |grep 0003` TMPという変数を用意して、そこに「cat /proc/net/route |awk {print $4} |grep 0003」の結果を代入している。 3つの命令をパイプでつないでいるのだが、ひとつづつ見てみる。 cat /proc/net/route /proc/net/routeを読み込んで次の命令に渡す。 この/procにはprocファイルシステムがマウントされていて、カーネルの各種統計情報を閲覧することができるが、/proc/net/routeにはIP経路情報が記載されている。 このコマンドを実行してみると Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT eth0 0001A8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0 eth0 00000000 0101A8C0 0003 0 0 0 00000000 0 0 0 というように出力された。 awk {print $4} awkコマンド?で第4パラメータを抜き取って次の命令へ。 第4パラメータとは、上の表から「Flags」のことだとわかる。 grep 0003 「0003」という文字列を検索している。 実際に「0003」という文字列があったので、この場合、TMP変数には「0003」と入る。 フラグ「0003」とは「経路は有効でゲートウェイを使用する」という内容だ。 今の例で言うなら、宛て先が「0.0.0.0/0」なので選ばれた経路はデフォルト経路である。 つまり、この一連の命令は「デフォルト経路をeth0が持っているかどうか」を調べていたのだ。 なければ空白が入る。 if [ "$TMP" = "" ]; then TMP変数が空なら以下を実行。 echo "add default if" 画面に「add default if」と表示。 #route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME route add -net default $ENETNAME routeコマンド?でeth0経由のネットワーク255.255.255.255を追加する、はコメントアウトされ、routeコマンド?でeth0にデフォルト経路を追加している。 コメントアウトされている255.255.255.255/32の経路情報は「ローカルブロードキャスト」と呼ばれるもので、ルーターを超えないLAN内に一斉にパケットを送信する手段である。 fi TMP変数の内容の条件分岐を終了する。 } set_defaultIf関数はここまで。 set_dns関数 set_dns() { set_dns関数はここから。 echo "Configuration resolv.conf" 画面に「Configuration resolv.conf」と表示する。 cat /dev/null /etc/resolv.conf /etc/resolv.confの内容を消去している。 if [ "$my_dns1" != "" ]; then my_dns1変数が空でなければ以下を実行。 echo "nameserver $my_dns1" /etc/resolv.conf 「nameserver my_dns1変数の値」を/etc/resolv.confに追記。 fi my_dns1変数が空かどうかの条件分岐を抜ける。 if [ "$my_dns2" != "" ]; then my_dns2変数が空でなければ以下を実行。 echo "nameserver $my_dns2" /etc/resolv.conf 「nameserver my_dns2変数の値」を/etc/resolv.confに追記。 fi my_dns2変数が空かどうかの条件分岐を終了する。 } set_dns関数はここまで。 start関数 start() { start関数の定義が始まる。 configure configure関数の実行。 /sbin/ifconfig lo up ifconfigコマンド?でlo(ループバック)デバイスを始動する。 killall $BASE killallコマンド?で「basename /sbin/dhcpcd」を停止する、という内容だが、basenameコマンド?で/sbin/dhcpcdを「dhcpcd」と削ってkillallコマンド?に渡している。 結果的には「killall dhcpcd」となる。 rm -f /etc/dhcpc/dhcpcd-eth0.pid /etc/dhcpc/dhcpcd-eth0.pidをrmコマンド?で消去する。 # delete default gw デフォルトゲートウェイを削除する、とのコメント。 while do /sbin/route del default if [ $? -ne 0 ]; then break fi done while文による無限ループだ。 /sbin/route del default routeコマンド?でデフォルト経路を削除し if [ $? -ne 0 ]; then break fi routeコマンド?がエラーの終了ステータス「1」を返すまでbreak文でループから抜けられない。 sleep 1 1秒数えたあと echo "Configuration network interface lo $ENETNAME" 画面上に「Configuration network interface lo eth0」と表示。 ## ## change mtu (frame-size 1518,4100,7418) ## mtuの変更、とのコメント。 if [ "$mtu" = "4102" ] ; then mtu=4084 elif [ "$mtu" = "7422" ] ; then mtu=7404 elif [ "$mtu" = "9694" ] ; then mtu=9676 else mtu=1500 fi mtu変数が 4102であればmtu変数に4084を代入 7422であればmtu変数に7404を代入 9694であればmtu変数に9676を代入 それ以外ならmtu変数に1500を代入 という内容だ。 /sbin/ifconfig $ENETNAME mtu $mtu multicast ifconfigコマンド?でeth0のmtuを上で判別した値に設定しマルチキャストフラグを立てる。 if [ $? -ne 0 ]; then echo "mtu fail" /sbin/ifconfig $ENETNAME mtu 1500 multicast fi ifconfigコマンド?がエラーの場合、画面上に「mtu fail」と表示し、eth0のmtuを1500に設定しマルチキャストフラグを立てる。 if [ "$my_ipaddress" = "dhcp" ]; then my_ipaddress変数が「dhcp」であれば以下を実行。 if [ "$my_dgw" != "" ]; then my_dgw変数が空でなければ以下を実行。 echo "--- set static dgw" DHCP_GW="-G $my_dgw" 画面上に「--- set static dgw」と表示。 DHCP_GWという変数を用意し、「-G $my_dgw」を代入。 fi my_dgw変数が空かどうかの条件分岐を終了する。 ## see also /etc/dhcpc/dhcpcd.exe echo "DHCPCSTATE=requesting" /var/tmp/dhcpcstate /etc/dhcpc/dhcpcd.exeを参照、とのコメント。 /var/tmp/dhcpcstateに「DHCPCSTATE=requesting」を書き込み。 ## echo "requesting DHCP tout=30[s]" 画面上に「requesting DHCP tout=30[s]」と表示する。 $DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME /sbin/dhcpcd -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 eth0 を実行。 if [ $? -ne 0 ]; then エラーが返れば以下を実行。 echo "** dhcp fail" 画面上に「** dhcp fail」と表示する。 echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate /var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。 set_defaultIp set_defaultGw set_defaultIp関数とset_defaultGw関数を実行する。 # wait linkup delay sleep 4 リンクが始動するのを4秒間待つ。 fi dhcpcdコマンドがエラーを返すかどうかの条件分岐を終了する。 else my_ipaddress変数が「dhcp」でなければ以下を実行。 echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate /var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。 echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask" /sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask /sbin/ifconfig eth0 $my_ipaddress netmask $my_subnetmask を実行。 if [ $? -ne 0 ]; then エラーが返れば以下。 set_defaultIp set_defaultIp関数を実行。 fi エラーかどうかの判別終了。 set_defaultGw set_dns set_defaultGw関数、set_dns関数の実行。 fi my_ipaddress変数が「dhcp」かどうかの条件分岐を終了する。 ## set_defaultIf set_defaultIf関数を実行する。 ## set ipaddress in /etc/hosts /etc/init.d/sethostname.sh /etc/hostsにIPアドレスを設定する、というコメント。 /etc/init.d/sethostname.shの実行。 #/usr/local/bin/change_notify.sh network /usr/local/bin/change_notify.sh networkの実行はコメントアウトだ。 } start関数はここまで。 stop関数 stop() { stop関数はここから。 echo "Deconfiguration network interface lo $ENETNAME" 画面上に「Deconfiguration network interface lo eth0」と表示する。 killall $BASE killallコマンド?で「basename /sbin/dhcpcd」を停止する、という内容だが、basenameコマンド?で/sbin/dhcpcdを「dhcpcd」と削ってkillallコマンド?に渡している。 結果的には「killall dhcpcd」となる。 /sbin/ifconfig $ENETNAME down ifconfigコマンド?でeth0を停止している。 /sbin/ifconfig lo down ifconfigコマンド?でlo(ループバック)デバイスを停止している。 } stop関数はここまで。 スクリプト本体 # for NFS NFS用の分岐。NFSとは「Network File System」の略。 ネットワーク上のデバイスを自分のファイルのように扱えるファイルシステムだ。 TMP=`grep /dev/root /proc/mounts|grep nfs` TMPという変数を用意し、そこに「grep /dev/root /proc/mounts|grep nfs」を代入している。 1つめのgrep /proc/mountsから/dev/rootという文字列を検索している。その結果を次に渡す。 2つめのgrep 渡された結果からnfsという文字列を検索している。 これらはつまり「/dev/rootがnfs形式でマウントされているかどうか」を調査しているということだ。 この結果は「(空)」か「nfs」というどちらか2つしかない。 if [ "$TMP" != "" ]; then TMP変数が空でなければ以下を実行。 つまり/dev/rootがnfs形式でマウントされていれば、という条件だ。 echo "nfs root mode. skip $ENETNAME network configuration." 画面上に「nfs root mode. skip eth0 network configuration.」と表示。 exit 0 終了ステータスに正常を示す「0」を設定しスクリプトを終了する。 fi TMP変数が空かどうかの条件分岐を終了。 lock_file check /usr/local/bin/kuro_libのlock_file関数にcheckという引数を付けて実行。 lock_file関数を見てみる。 lock_file関数 lock_file(){ lock_file関数はここから。 case $1 in 第1引数の内容で処理内容を分岐する。 checkの場合 check) [ -f "${LOCK}" ] echo "${THIS_SCRIPT} already runnign" /var/lock/networkingが存在すれば、画面上に「${THIS_SCRIPT} already runnign」と表示する。 ちなみに行末の「runnign」は「running」のスペルミスだろう。 return 1 ;; 戻り値に「1」を設定しlock_file関数を終了する。 createの場合 create) echo "${THIS_SCRIPT}" $2 ${LOCK} ;; 「${THIS_SCRIPT} 第2引数」と/var/lock/networkingに書き込む。 deleteの場合 delete) rm -f ${LOCK} ;; /var/lock/networkingを消去する。 delete_logの場合 delete_log) rm -f ${LOCK}.log ;; /var/lock/networking.logを消去する。 それ以外の場合 *) ;; 何もしない。 esac 第1引数の内容による処理振り分けを終了する。 } lock_file関数はここまで。 lock_file create case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac lock_file delete exit 0
https://w.atwiki.jp/aerocats/pages/34.html
LinuxにおいてIPネットワーク上での通信には明快なルールが存在する。 IPアドレス←→ホスト名を解決(名前解決)するDNS?が存在するのか DNS?を使わずに名前解決するのなら/etc/hosts?ファイルを使う DNS?を使うのなら各コンピューターに「どのDNS?サーバーを使うのか」を設定するため、/etc/resolv.conf?にDNS?サーバのIPアドレスを記述する 2と3のどちらを優先するかを/etc/nsswitch.conf?に記述する という段階で設定する必要がある。 1.DNSが存在するか インターネットに接続する場合であればDNS?は不可欠だが、LAN内での通信ならば必ずしも必要ではない。 LAN内通信の場合、通信相手のIPアドレスさえわかれば解決すべき名前を使わずに済むので苦労しない。 2./etc/hosts LAN内通信でホスト名(たとえばWindowsXPコンピューターに『xp』など)を使った接続をしたい場合、DNS?サーバに名前解決をさせるのが無難だが、LAN内コンピューターの数が少ない場合などにDNS?設置はやや大げさかもしれない。 そういう場合、/etc/hosts?ファイルが役に立つ。 /etc/hosts?ファイルにIPアドレスとホスト名を対に記述しておけば、記述したIPアドレスにホスト名で接続することができる。 3./etc/resolv.conf インターネット接続や大規模なLANでの通信の場合、DNS?を設けそれを利用する方が適している。 DNS?と言っても、一般的なブロードバンドルーターやCTUを指すことが多い。 つまりほとんどはルーターのIPアドレスを指定すれば何とかなるだろう。 4./etc/nsswitch.conf 上記2あるいは3のどちらを優先的に名前解決の方法として使用するか、をこの/etc/nsswitch.conf?で設定する。
https://w.atwiki.jp/aerocats/pages/15.html
起動メッセージ メッセージを読む電源ON 周辺装置の初期化 メインメモリ上にカーネルを読み込む カーネルの起動SATAデバイスドライバの読み込み NORフラッシュ NANDフラッシュ USB ネットワーク rootfsのマウント ルートファイルシステムによる初期化MountSystemFolders関数 checkroot.sh Kevent.sh mount_share.sh sethostname.sh networking.sh httpd.sh telnet.sh inetd.sh smb.sh clientUtil_servd.sh bootcomplete.sh FanController.sh boss.sh 起動メッセージ Orion1 CPU = Low === KURO U-Boot. === ** LOADER ** ** KUROBOX BOARD KURO_BOX LE (CFG_ENV_ADDR=fffff000) U-Boot 1.1.1 (Apr 10 2007 - 18 10 08) Marvell version 1.12.1 - TINY DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB [256kB@fffc0000] Flash 256 kB Addresses 20M - 0M are saved for the U-Boot usage. Mem malloc Initialization (20M - 16M) Done NAND 256 MB Soc 88F5182 A2 CPU ARM926 (Rev 0) running @ 500Mhz Orion 1 streaming disabled SysClock = 250Mhz , TClock = 166Mhz USB 0 host mode USB 1 host mode PCI 0 PCI Express Root Complex Interface PCI 1 Conventional PCI, speed = 33000000 Net egiga0 [PRIME] Using 88E1118 phy Found boot image hit any key to switch tftp boot. Hit any key to stop autoboot 2 1 0 system_bootend Hit any key to stop autoboot 3 2 1 0 Loading from device 0 NULL at 0xfa000000 (offset 0x20000) Image Name Linux-2.6.12.6-arm1 Created 2007-04-10 13 45 13 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736548 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 stop_sound ## Booting image at 00100000 ... Image Name Linux-2.6.12.6-arm1 Created 2007-04-10 13 45 13 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736548 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 Verifying Checksum ... OK OK Starting kernel ... arg console=ttyS0,115200 root=/dev/mtdblock2 rw panic=5 BOOTVER=1.09 CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX --- Uncompressing Linux................................................................................................................. done, booting the kernel. Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #27 Tue Apr 10 22 47 16 JST 2007 CPU ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ) CPU0 D VIVT write-back cache CPU0 I cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets CPU0 D cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets Machine MV-88fxx81 Using UBoot passing parameters structure Sys Clk = 250000000, Tclk = 166664740 Memory policy ECC disabled, Data cache writeback Built 1 zonelists Kernel command line console=ttyS0,115200 root=/dev/mtdblock2 rw panic=5 BOOTVER=1.09 PID hash table entries 1024 (order 10, 16384 bytes) Console colour dummy device 80x30 Dentry cache hash table entries 32768 (order 5, 131072 bytes) Inode-cache hash table entries 16384 (order 4, 65536 bytes) Memory 128MB 0MB 0MB 0MB = 128MB total Memory 126208KB available (3037K code, 426K data, 112K init) Mount-cache hash table entries 512 CPU Testing write buffer coherency ok NET Registered protocol family 16 serial_initialize_ttyS1 (Debug) ttyS1 is initialized. config_device_cs Error Unknown board CPU Interface ------------- SDRAM_CS0 ....base 00000000, size 128MB SDRAM_CS1 ....disable SDRAM_CS2 ....disable SDRAM_CS3 ....disable PEX0_MEM ....base e0000000, size 128MB PEX0_IO ....base f2000000, size 1MB PCI0_MEM ....base e8000000, size 128MB PCI0_IO ....base f2100000, size 1MB INTER_REGS ....base f1000000, size 1MB DEVICE_CS0 ....base fa000000, size 2MB DEVICE_CS1 ....base f4000000, size 32MB DEVICE_CS2 ....base fa800000, size 1MB DEV_BOOCS ....base ff800000, size 8MB CRYPTO ENG ....no such Flash bankwidth 1, base ff800000, size 400000 KUROBOX FLASH size 4096[KB] Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_BOARD_KUROBOX Soc 88F5182 A2 Detected Tclk 166664740 and SysClk 250000000 Marvell USB EHCI Host controller #0 c04e4b00 Marvell USB EHCI Host controller #1 c04e4a40 pexBarOverlapDetect winNum 2 overlap current 0 mvPexInit Warning Bar 2 size is illigal it will be disabled please check Pex and CPU windows configuration PCI bus0 Fast back to back transfers enabled PCI bus1 Fast back to back transfers enabled SCSI subsystem initialized usbcore registered new driver usbfs usbcore registered new driver hub Use the XOR engines (offloading) for enhancing the following functions o RAID 5 Xor calculation o kernel memcpy o kenrel memzero o copy user to/from kernel buffers Number of XOR engines to use 2 cesadev_init(c00122e4) Fast Floating Point Emulator V0.9 (c) Peter Teichmann. inotify device minor=63 JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc. SGI XFS with no debug enabled Serial 8250/16550 driver $Revision 1.90 $ 4 ports, IRQ sharing disabled ttyS0 at MMIO 0x0 (irq = 3) is a 16550A ttyS1 at MMIO 0x0 (irq = 4) is a 16550A io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered RAMDISK driver initialized 3 RAM disks of 32768K size 1024 blocksize loop loaded (max 8 devices) Marvell Gigabit Ethernet Driver egiga o Ethernet descriptors in DRAM o DRAM SW cache-coherency o Checksum offload enabled o Loading network interface ** egiga_init_module (10) eth0 Intergrated Sata device found scsi0 Marvell SCSI to SATA adapter scsi1 Marvell SCSI to SATA adapter Vendor Seagate Model ST380815AS Rev 3.AA Type Direct-Access ANSI SCSI revision 03 SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back sda unknown partition table Attached scsi disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0 physmap flash device 400000 at ff800000 Found SST 39LF020 phys_mapped_flash Found 1 x8 devices at 0x0 in 8-bit bank number of JEDEC chips 1 cfi_cmdset_0002 Disabling erase-suspend-program due to code brokenness. RedBoot partition parsing not available Debug nand_scan nand_flash_ids[i].pagesize is exist Debug nand_scan mtd- erasesize=0x00020000 Debug nand_scan mtd- oobblock=0x00000800 Debug nand_scan mtd- oobsize=0x00000040 NAND device Manufacturer ID 0x20, Chip ID 0xda (ST Micro NAND 256MiB 3,3V 8-bit) Scanning device for bad blocks Using static partition definition Creating 3 MTD partitions on "nand_mtd" 0x00000000-0x00400000 "uImage" 0x00400000-0x04400000 "rootfs" 0x04400000-0x10000000 "extra" usbmon debugs is not available ehci_platform ehci_platform.4523 EHCI Host Controller ehci_platform ehci_platform.4523 new USB bus registered, assigned bus number 1 ehci_platform ehci_platform.4523 irq 17, io mem 0x00000000 ehci_platform ehci_platform.4523 park 0 ehci_platform ehci_platform.4523 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 1-0 1.0 USB hub found hub 1-0 1.0 1 port detected ehci_platform ehci_platform.16781 EHCI Host Controller ehci_platform ehci_platform.16781 new USB bus registered, assigned bus number 2 ehci_platform ehci_platform.16781 irq 12, io mem 0x00000000 ehci_platform ehci_platform.16781 park 0 ehci_platform ehci_platform.16781 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 2-0 1.0 USB hub found hub 2-0 1.0 1 port detected USB Universal Host Controller Interface driver v2.2 Initializing USB Mass Storage driver... usbcore registered new driver usb-storage USB Mass Storage support registered. usbcore registered new driver usbhid drivers/usb/input/hid-core.c v2.01 USB HID core driver mice PS/2 mouse device common for all mice md raid0 personality registered as nr 2 md raid1 personality registered as nr 3 md raid5 personality registered as nr 4 raid5 measuring checksumming speed arm4regs 304.000 MB/sec 8regs 215.200 MB/sec 32regs 249.200 MB/sec raid5 using function arm4regs (304.000 MB/sec) md md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27 Buffalo Platform Linux Driver(Light) 0.01 installed. MICON ctrl (C) BUFFALO INC. V.1.00 installed. Kernel event proc (C) BUFFALO INC. V.1.00 installed. MICON V2 (C) BUFFALO INC. V.1.00 installed. NET Registered protocol family 2 IP routing cache hash table of 1024 buckets, 8Kbytes TCP established hash table entries 8192 (order 4, 65536 bytes) TCP bind hash table entries 8192 (order 3, 32768 bytes) TCP Hash tables configured (established 8192 bind 8192) NET Registered protocol family 1 NET Registered protocol family 17 md Autodetecting RAID arrays. md autorun ... md ... autorun DONE. Empty flash at 0x00df85f8 ends at 0x00df8800 VFS Mounted root (jffs2 filesystem). Freeing init memory 112K --- rcStart (NANDroot) --- ===== Starting MountSystemFolders ===== mounting procfs ... [Success] mounting sysfs ... [Success] mouting usbfs ... [Success] remouting rootfs ... [Success] mounting all devices ... [Success] ===== Starting checkroot.sh ===== rm /var/lock/perfmon is a directory rm /var/lock/printing is a directory rm /var/lock/subsys is a directory [Success] ===== Starting Kevent.sh ===== [Success] HDD未フォーマットの場合 ===== Starting mount_share.sh ===== Mounting /dev/sda on /mnt/disk1 as a xfs file system. XFS bad magic number XFS SB validate failed mount Mounting /dev/sda on /mnt/disk1 failed Invalid argument Failed. Mounting /dev/sda on /mnt/disk1 as a ext3 file system. mount Mounting /dev/sda on /mnt/disk1 failed Invalid argument Failed. Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system. Success. [Success] HDDをフォーマットしている場合 ===== Starting mount_share.sh ===== Mounting /dev/sda1 on /mnt/disk1 as a xfs file system. XFS mounting filesystem sda1 Starting XFS recovery on filesystem sda1 (dev sda1) Ending XFS recovery on filesystem sda1 (dev sda1) Success. Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system. Success. [Success] ===== Starting sethostname.sh ===== hostname is setted to KUROBOX-PRO [Success] LANに未接続の場合 ===== Starting networking.sh ===== create network files.. IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[] killall dhcpcd no process killed route SIOC[ADD|DEL]RT No such process Configuration network interface lo eth0 requesting DHCP tout=30[s] ** dhcp fail ** setting default ip route SIOC[ADD|DEL]RT No such process /etc/dhcpc/dhcpcd.exe down dhcpcd.exe interface eth0 has been brought down add default if hostname is setted to KUROBOX-PRO [Success] LANに接続されている場合 ===== Starting networking.sh ===== create network files.. IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[] killall dhcpcd no process killed route SIOC[ADD|DEL]RT No such process Configuration network interface lo eth0 requesting DHCP tout=30[s] eth0 link down eth0 link up 5 , full duplex 5 , speed 100 Mbps 5 /etc/dhcpc/dhcpcd.exe /etc/dhcpc/dhcpcd-eth0.info up dhcpcd.exe interface eth0 has been configured with old IP=192.168.1.9 hostname is setted to KUROBOX-PRO [Success] ===== Starting httpd.sh ===== [Success] ===== Starting telnet.sh ===== [Success] ===== Starting inetd.sh ===== [Success] ===== Starting smb.sh ===== $Starting SMB services $Starting NMB services [Success] ===== Starting clientUtil_servd.sh ===== Starting clientUtil_server starting on eth0 [Success] ===== Starting bootcomplete.sh ===== [Success] ===== Starting FanController.sh ===== [Success] ===== Starting boss.sh ===== (サングラス男AA) [Success] KUROUTOSHIKOU KUROBOX Series KUROBOX/PRO(KOSHO) KUROBOX-PRO login メッセージを読む 電源ON 玄箱PROの電源を入れると、まずCPUのプログラムカウンタにU-Bootのメモリアドレスが設定されU-Bootが実行される。 Orion1 CPU = Low === KURO U-Boot. === ** LOADER ** ** KUROBOX BOARD KURO_BOX LE (CFG_ENV_ADDR=fffff000) U-Boot 1.1.1 (Apr 10 2007 - 18 10 08) Marvell version 1.12.1 - TINY 周辺装置の初期化 U-Bootによる低レベルでの初期化を行い、カーネルイメージを見つける。 PCで言うBIOSのような働きをする。 DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB [256kB@fffc0000] Flash 256 kB Addresses 20M - 0M are saved for the U-Boot usage. Mem malloc Initialization (20M - 16M) Done NAND 256 MB Soc 88F5182 A2 CPU ARM926 (Rev 0) running @ 500Mhz Orion 1 streaming disabled SysClock = 250Mhz , TClock = 166Mhz USB 0 host mode USB 1 host mode PCI 0 PCI Express Root Complex Interface PCI 1 Conventional PCI, speed = 33000000 Net egiga0 [PRIME] Using 88E1118 phy Found boot image hit any key to switch tftp boot. Hit any key to stop autoboot 2 1 0 system_bootend Hit any key to stop autoboot 3 2 1 0 メインメモリ上にカーネルを読み込む 見つけたカーネルイメージをメインメモリへ読み込む。 PCで言うブートローダーの働きをする。 NANDフラッシュの0x20000番地(mtd1の128k以降)からロードする。 Loading from device 0 NULL at 0xfa000000 (offset 0x20000) Image Name Linux-2.6.12.6-arm1 Created 2007-04-10 13 45 13 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736548 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 stop_sound カーネルイメージをメインメモリの0x00100000番地へロード。 ## Booting image at 00100000 ... Image Name Linux-2.6.12.6-arm1 Created 2007-04-10 13 45 13 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736548 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 Verifying Checksum ... OK OK カーネルの起動 読み込んだカーネルを実行する。 この時点でU-Bootからカーネルに制御が移される。 Starting kernel ... arg console=ttyS0,115200 root=/dev/mtdblock2 rw panic=5 BOOTVER=1.09 CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX --- カーネルが圧縮された自身の展開。 Uncompressing Linux................................................................................................................. done, booting the kernel. カーネルの起動。 Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #27 Tue Apr 10 22 47 16 JST 2007 CPU ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ) CPU0 D VIVT write-back cache CPU0 I cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets CPU0 D cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets Machine MV-88fxx81 Using UBoot passing parameters structure Sys Clk = 250000000, Tclk = 166664740 Memory policy ECC disabled, Data cache writeback Built 1 zonelists Kernel command line console=ttyS0,115200 root=/dev/mtdblock2 rw panic=5 BOOTVER=1.09 PID hash table entries 1024 (order 10, 16384 bytes) Console colour dummy device 80x30 Dentry cache hash table entries 32768 (order 5, 131072 bytes) Inode-cache hash table entries 16384 (order 4, 65536 bytes) Memory 128MB 0MB 0MB 0MB = 128MB total Memory 126208KB available (3037K code, 426K data, 112K init) Mount-cache hash table entries 512 CPU Testing write buffer coherency ok NET Registered protocol family 16 serial_initialize_ttyS1 (Debug) ttyS1 is initialized. config_device_cs Error Unknown board CPU Interface ------------- SDRAM_CS0 ....base 00000000, size 128MB SDRAM_CS1 ....disable SDRAM_CS2 ....disable SDRAM_CS3 ....disable PEX0_MEM ....base e0000000, size 128MB PEX0_IO ....base f2000000, size 1MB PCI0_MEM ....base e8000000, size 128MB PCI0_IO ....base f2100000, size 1MB INTER_REGS ....base f1000000, size 1MB DEVICE_CS0 ....base fa000000, size 2MB DEVICE_CS1 ....base f4000000, size 32MB DEVICE_CS2 ....base fa800000, size 1MB DEV_BOOCS ....base ff800000, size 8MB CRYPTO ENG ....no such Flash bankwidth 1, base ff800000, size 400000 KUROBOX FLASH size 4096[KB] Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_BOARD_KUROBOX Soc 88F5182 A2 Detected Tclk 166664740 and SysClk 250000000 Marvell USB EHCI Host controller #0 c04e4b00 Marvell USB EHCI Host controller #1 c04e4a40 pexBarOverlapDetect winNum 2 overlap current 0 mvPexInit Warning Bar 2 size is illigal it will be disabled please check Pex and CPU windows configuration PCI bus0 Fast back to back transfers enabled PCI bus1 Fast back to back transfers enabled SCSI subsystem initialized usbcore registered new driver usbfs usbcore registered new driver hub Use the XOR engines (offloading) for enhancing the following functions o RAID 5 Xor calculation o kernel memcpy o kenrel memzero o copy user to/from kernel buffers Number of XOR engines to use 2 cesadev_init(c00122e4) Fast Floating Point Emulator V0.9 (c) Peter Teichmann. inotify device minor=63 JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc. SGI XFS with no debug enabled Serial 8250/16550 driver $Revision 1.90 $ 4 ports, IRQ sharing disabled ttyS0 at MMIO 0x0 (irq = 3) is a 16550A ttyS1 at MMIO 0x0 (irq = 4) is a 16550A io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered RAMDISK driver initialized 3 RAM disks of 32768K size 1024 blocksize loop loaded (max 8 devices) Marvell Gigabit Ethernet Driver egiga o Ethernet descriptors in DRAM o DRAM SW cache-coherency o Checksum offload enabled o Loading network interface ** egiga_init_module (10) eth0 SATAデバイスドライバの読み込み Intergrated Sata device found scsi0 Marvell SCSI to SATA adapter scsi1 Marvell SCSI to SATA adapter Vendor Seagate Model ST380815AS Rev 3.AA Type Direct-Access ANSI SCSI revision 03 SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back sda unknown partition table Attached scsi disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0 NORフラッシュ physmap flash device 400000 at ff800000 Found SST 39LF020 phys_mapped_flash Found 1 x8 devices at 0x0 in 8-bit bank number of JEDEC chips 1 cfi_cmdset_0002 Disabling erase-suspend-program due to code brokenness. RedBoot partition parsing not available NANDフラッシュ Debug nand_scan nand_flash_ids[i].pagesize is exist Debug nand_scan mtd- erasesize=0x00020000 erasesizeとはNANDフラッシュの内容を消去する単位の大きさであり、それが0x00020000、つまり128KBだとなっている。 消去はブロック単位で行われるため、1ブロック128KBだということになる。 Debug nand_scan mtd- oobblock=0x00000800 OOBとはOut Of Bandの略で、ECCと呼ばれるエラー訂正コードを格納する領域を意味する。 16進数で00000800は10進数で2048を意味し、これはOOBのブロック数を指している。 Debug nand_scan mtd- oobsize=0x00000040 OOBのサイズが00000040だと意味する。 10進数で64となり、OOBのサイズは64バイトだとわかる。 NAND device Manufacturer ID 0x20, Chip ID 0xda (ST Micro NAND 256MiB 3,3V 8-bit) Scanning device for bad blocks Using static partition definition Creating 3 MTD partitions on "nand_mtd" 0x00000000-0x00400000 "uImage" 0x00400000-0x04400000 "rootfs" 0x04400000-0x10000000 "extra" USB usbmon debugs is not available ehci_platform ehci_platform.4523 EHCI Host Controller ehci_platform ehci_platform.4523 new USB bus registered, assigned bus number 1 ehci_platform ehci_platform.4523 irq 17, io mem 0x00000000 ehci_platform ehci_platform.4523 park 0 ehci_platform ehci_platform.4523 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 1-0 1.0 USB hub found hub 1-0 1.0 1 port detected ehci_platform ehci_platform.16781 EHCI Host Controller ehci_platform ehci_platform.16781 new USB bus registered, assigned bus number 2 ehci_platform ehci_platform.16781 irq 12, io mem 0x00000000 ehci_platform ehci_platform.16781 park 0 ehci_platform ehci_platform.16781 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 2-0 1.0 USB hub found hub 2-0 1.0 1 port detected USB Universal Host Controller Interface driver v2.2 Initializing USB Mass Storage driver... usbcore registered new driver usb-storage USB Mass Storage support registered. usbcore registered new driver usbhid drivers/usb/input/hid-core.c v2.01 USB HID core driver mice PS/2 mouse device common for all mice md raid0 personality registered as nr 2 md raid1 personality registered as nr 3 md raid5 personality registered as nr 4 raid5 measuring checksumming speed arm4regs 304.000 MB/sec 8regs 215.200 MB/sec 32regs 249.200 MB/sec raid5 using function arm4regs (304.000 MB/sec) md md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27 Buffalo Platform Linux Driver(Light) 0.01 installed. MICON ctrl (C) BUFFALO INC. V.1.00 installed. Kernel event proc (C) BUFFALO INC. V.1.00 installed. MICON V2 (C) BUFFALO INC. V.1.00 installed. ネットワーク NET Registered protocol family 2 IP routing cache hash table of 1024 buckets, 8Kbytes TCP established hash table entries 8192 (order 4, 65536 bytes) TCP bind hash table entries 8192 (order 3, 32768 bytes) TCP Hash tables configured (established 8192 bind 8192) NET Registered protocol family 1 NET Registered protocol family 17 md Autodetecting RAID arrays. md autorun ... md ... autorun DONE. Empty flash at 0x00df85f8 ends at 0x00df8800 rootfsのマウント ルートファイルシステムのマウント。 bootargs_rootで設定されたデバイスがマウントされている。 VFS Mounted root (jffs2 filesystem). initで使用したメモリの解放。 Freeing init memory 112K ルートファイルシステムによる初期化 /etc/init.d/rcSの実行。 ここからは実際にマウントされたルートファイルシステムによるシステムの初期化。 --- rcStart (NANDroot) --- MountSystemFolders関数 /etc/init.d/rcS内のMountSystemFolders関数の実行。 ===== Starting MountSystemFolders ===== mounting procfs ... [Success] mounting sysfs ... [Success] mouting usbfs ... [Success] remouting rootfs ... [Success] mounting all devices ... [Success] checkroot.sh /etc/init.d/checkroot.shの実行。 ===== Starting checkroot.sh ===== rm /var/lock/perfmon is a directory rm /var/lock/printing is a directory rm /var/lock/subsys is a directory [Success] Kevent.sh /etc/init.d/Kevent.shの実行。 ===== Starting Kevent.sh ===== [Success] mount_share.sh /etc/init.d/mount_share.shの実行。 HDDが未フォーマットの場合 ===== Starting mount_share.sh ===== Mounting /dev/sda on /mnt/disk1 as a xfs file system. XFS bad magic number XFS SB validate failed mount Mounting /dev/sda on /mnt/disk1 failed Invalid argument Failed. Mounting /dev/sda on /mnt/disk1 as a ext3 file system. mount Mounting /dev/sda on /mnt/disk1 failed Invalid argument Failed. Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system. Success. [Success] HDDがフォーマット済みの場合 ===== Starting mount_share.sh ===== Mounting /dev/sda1 on /mnt/disk1 as a xfs file system. XFS mounting filesystem sda1 Starting XFS recovery on filesystem sda1 (dev sda1) Ending XFS recovery on filesystem sda1 (dev sda1) Success. Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system. Success. [Success] sethostname.sh /etc/init.d/sethostname.sh?の実行。 ===== Starting sethostname.sh ===== hostname is setted to KUROBOX-PRO [Success] networking.sh /etc/init.d/networking.shの実行。 LANに未接続の場合 ===== Starting networking.sh ===== create network files.. IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[] killall dhcpcd no process killed route SIOC[ADD|DEL]RT No such process Configuration network interface lo eth0 requesting DHCP tout=30[s] ** dhcp fail ** setting default ip route SIOC[ADD|DEL]RT No such process /etc/dhcpc/dhcpcd.exe down dhcpcd.exe interface eth0 has been brought down add default if hostname is setted to KUROBOX-PRO [Success] LANに接続済みの場合 ===== Starting networking.sh ===== create network files.. IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[] killall dhcpcd no process killed route SIOC[ADD|DEL]RT No such process Configuration network interface lo eth0 requesting DHCP tout=30[s] eth0 link down eth0 link up 5 , full duplex 5 , speed 100 Mbps 5 /etc/dhcpc/dhcpcd.exe /etc/dhcpc/dhcpcd-eth0.info up dhcpcd.exe interface eth0 has been configured with old IP=192.168.1.9 hostname is setted to KUROBOX-PRO [Success] httpd.sh /etc/init.d/httpd.sh?の実行。 ===== Starting httpd.sh ===== [Success] telnet.sh /etc/init.d/telnet.sh?の実行。 ===== Starting telnet.sh ===== [Success] inetd.sh /etc/init.d/inetd.sh?の実行。 ===== Starting inetd.sh ===== [Success] smb.sh /etc/init.d/smb.sh?の実行。 ===== Starting smb.sh ===== $Starting SMB services $Starting NMB services [Success] clientUtil_servd.sh /etc/init.d/clientUtil_servd.sh?の実行。 ===== Starting clientUtil_servd.sh ===== Starting clientUtil_server starting on eth0 [Success] bootcomplete.sh /etc/init.d/bootcomplete.sh?の実行。 ===== Starting bootcomplete.sh ===== [Success] FanController.sh /etc/init.d/FanController.sh?の実行。 ===== Starting FanController.sh ===== [Success] boss.sh /etc/init.d/boss.sh?の実行。 ===== Starting boss.sh ===== (サングラス男AA) [Success] KUROUTOSHIKOU KUROBOX Series KUROBOX/PRO(KOSHO) KUROBOX-PRO login
https://w.atwiki.jp/fns1556/pages/96.html
Cisco Router DNS Proxy 例)Cisco RouterをDNS Proxy Serverにする。この時、フォワーディング先をPrimary 172.16.0.1, Secondary 172.16.0.2とする。 Router(config)#ip dns server Router(config)#ip dns view default Router(cfg-dns-view)#dns forwarder 172.16.0.1 Router(cfg-dns-view)#dns forwarder 172.16.0.2 また、Dns Viewを使うことにより、VRFにも対応できるらしい・・・(・ω・)後で実装しようかなぁ 参考:スプリット DNS 参考:Cisco1812Jで行こう! AlliedTelesis Router DNS Relay 例)AlliedTelesisのルーターをDNS Relayとして運用する。この時、Cacheのサイズを100件とし、フォワーディング先のDNSサーバーを192.168.255.254とする。 Manager Router ena ip dnsrelay Manager Router add ip dns prim=192.168.255.254 Manager Router set ip dns cache si=100 キャッシュを確認すると、エントリーが保存されていることが分かる。 Manager Router show ip dns cache Manager Router DNS Cache Entries ... 2 (592 bytes) Manager Router -------------------------------------------------------------------------------- Manager Router Domain Name IP Address TTL Matches Manager Router (IPv6 Address) (Min) Manager Router -------------------------------------------------------------------------------- Manager Router www.yahoo.co.jp 124.83.203.233 1 0 Manager Router www.google.co.jp 173.194.38.95 1 0 Manager Router -------------------------------------------------------------------------------- 参考:CentreCOM AR550S コマンドリファレンス 2.9
https://w.atwiki.jp/aerocats/pages/2.html
ブログ内検索 and or メニュー トップページ 掲示板 更新履歴 取得中です。 未作成ページ telnet arm httpd fileコマンド カーネル sethostname.sh httpd.sh telnet.sh inetd.sh smb.sh clientutil_servd.sh bootcomplete.sh fancontroller.sh boss.sh パーティション routedコマンド gettyコマンド xinetd inetd ランレベル 共有ライブラリ bash syslog wgetコマンド lsコマンド シンボリックリンク dns hosts nsswitch.conf cpコマンド rmコマンド デバイス unix システムコール vfs tarコマンド fdiskコマンド mkdirコマンド nvramコマンド 環境変数について シェル dfコマンド sedコマンド grepコマンド routeコマンド ifconfigコマンド awkコマンド killallコマンド echoコマンド procコマンド -
https://w.atwiki.jp/aerocats/pages/53.html
RESETボタンを押しHDDに開発用Linux(あるいは何らかのディストリビューション導入キット)を導入しようとした際、コンソール上では何も進まなくなりINFO LEDもオレンジの点滅が止まる気配がない、といったエラーが起こることがある。 この時mountコマンドで確認してもHDDはマウントされておらず、ただfdiskコマンド?で確認すると4つのパーティション?に切られていることがわかっている。 そして開発用Linuxのhddrootfs.tar.gzも展開されていないはずだ。 原因HDDの取り付け後 パーティションを切る 各パーティションをフォーマットし、開発用Linux導入完了 fdiskコマンドでパーティション解放 InitDisk1.shのチェックを抜ける パーティションを切る 各パーティションをフォーマットする /etc/melco/infoを用意する 対処 原因 一度、開発用Linuxを導入し何らかの事情で再度開発用Linuxを導入する際によく見受けられるエラーだ。 この時、共通して見られる行為は 標準Linuxからのブートになっている HDDはfdiskコマンド?でパーティション?を解放している dd if=/dev/zero /dev/sda bs=1M count=1と実行している場合もある などだろう。 ここで玄箱PROのHDDがどのように処理されているのか追ってみる。 HDDの取り付け後 まずは未フォーマットのHDDがある。 もちろんこのままではHDDとして機能はしない。(必要に応じて)パーティション?を切り、ファイルシステムを導入(フォーマット)しないと役に立たない。 パーティションを切る /usr/local/bin/InitDisk1.sh内の処理で、 fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition を実行しパーティション?を4つに切る。 HDDの先頭512バイトにパーティションテーブルを含むMBRが確保される。 各パーティションをフォーマットし、開発用Linux導入完了 続けて/usr/local/bin/InitDisk1.shが呼び出した/usr/local/bin/kuro_lib内のFormat_EXT3関数、Format_XFS関数、そしてmkswapコマンド?でそれぞれのパーティション?を適宜フォーマットしていく。 この際に重要なのは、各パーティション?の先頭512バイトにブートセクターが置かれることだ。 ext3形式のブートセクターには何も記録されていないが、xfs形式のブートセクターの先頭3バイトには「XFS」という文字列が入る(余談だが、このためxfs形式の上からext3形式をフォーマットしても先頭の「XFS」という文字列が残る)。 この後、各種ファイルの展開などがあり開発用Linuxの導入も終わる。 fdiskコマンドでパーティション解放 HDDのマウントをはずし、fdiskコマンド?でHDD先頭のパーティションテーブルを書き換え(消去し)、各パーティション?の「壁」を取り払う。 しかしこのままであれば、基本領域であったパーティション?の中のデータそのものはフォーマットされない限り消えることはない。 ここで重要なのは「パーティション?は存在しないがsda2とsda4の先頭領域だった場所には「XFS」という文字列はそのまま残っている」という点だ。 そしてこの状態で再度の開発用Linuxの導入をするため、RESETボタンを押すとどうなるか続けてみる。 InitDisk1.shのチェックを抜ける /usr/local/bin/InitDisk1.shのXFSフォーマットチェックの方法は以下だ。 XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted つまり、/dev/sda、/dev/sda1、/dev/sda4の先頭に「XFS」という文字列がなければ「フォーマットされていない」と見なされる。 この時のHDDの状態は下のようになっている。 /dev/sdaは存在するが先頭に「XFS」という文字列はなく、/dev/sda1、/dev/sda4に関してはそもそもそのようなデバイスが存在しない。 よってこの状態のHDDは/usr/local/bin/InitDisk1.shの初期チェックを通過してしまう。 パーティションを切る その次に待っているのはパーティション?を切る処理だ。 fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition この処理後、HDDは以下のようになる。 /usr/local/bin/PartitionDefinitionを変更して実行しない限り、以前とまったく同じパーティション?の切り方になるはずだ。 各パーティションをフォーマットする 次に/usr/local/bin/InitDisk1.shはFormat_EXT3関数とFormat_XFS関数を呼び、それぞれext3形式とxfs形式にフォーマットを始める。 Format_EXT3関数にはチェック項目はないため、/dev/sda1は問題なくext3形式でのフォーマットが完了する。 しかしFormat_XFS関数は再度ここでxfs形式フォーマットのチェックを行う。 KEY=`dd if=$1 bs=1 count=3` if [ "${KEY}" = "XFS" ] ; then チェック対象デバイスの先頭3バイトを読み込み、それが「XFS」であれば別の処理が待っている。 この時、HDDは以下のようになっている。 /dev/sda1、/dev/sda3はフォーマットする、という意味で空白にしている。 /dev/sda2、/dev/sda4は、ちょうど先頭3バイトに「XFS」が入る形になっている。 よって次の処理を実行する。 . /etc/melco/info /etc/melco/infoというファイルを開く、という意味だが、このファイルは標準では存在しない。 製品仕様書にもあるが、 内蔵HDD(/dev/sda)が既にxfs形式でフォーマットされている場合、フォーマットは行われない。但し、/etc/melco/info内、 force_format=yesとすることで、xfsでフォーマットされている/いないにかかわらず、フォーマットを行うようにすることができる。 とのことで、任意のファイルだ。 このファイルがないため、多くは内部的にここで止まっている。 これが処理が止まり、INFO LEDが点滅しつづける原因だ。点滅を止めるmiconaplコマンドに到達していないのだ。 この図のような状態に、実際は/dev/sda1のext3形式でのフォーマットが済んでいるため、/dev/sda3以外のパーティション?はすべて手動でマウントできる。 その後で、INFO LEDを止めるため miconapl -a led_set_code_information clear とすればいい。 /dev/sda3は mkswap /dev/sda3 swapon /dev/sda3 でswapを有効にできる。 ただし、開発環境はHDDに一切展開されていないので注意が必要だ。 /etc/melco/infoを用意する これを回避するため/etc/melco/infoを用意した場合、次の処理を通る。 if [ "${force_format}" = "yes" ] ; then 確認のため10秒間のタイマーが始動 else return 0 fi (略) dd if=/dev/zero of=$1 bs=512 count=1 mkfs.xfs $1 -f /etc/melco/infoに「force_format=yes」と記述していれば、先頭の512バイト(つまりブートセクター)を消去しxfs形式でのフォーマットが始まる。 しかし、/etc/melco/infoが「force_format=no」あるいは記述がない場合、elseを通りreturn 0、つまりFormat_XFS関数を抜けさせられ、あとに続くmkfs.xfsコマンドは実行されない。 つまり、/dev/sda2、/dev/sda4にフォーマットは施されないのだ。 この時のHDDは以下。 パーティション?を切る前のファイルシステムがそのまま使えてしまうため、一見mkfs.xfsが処理されたように思えるためわかりにくいが、/dev/sda2と/dev/sda4は実は前回の開発用Linuxのままなのだ。 そこにデータが残っていれば扱うことができる。 対処 /etc/melco/infoを用意し、force_format=yesと記述しておけばいい。 ~ # mkdir /etc/melco ~ # echo force_format=yes /etc/melco/info これでFormat_XFS関数を通過できる。 現時点でINFO LEDが点滅している場合、fdiskコマンド?で全パーティション?を解放し、上の/etc/melco/infoを用意して一度再起動し、再度RESETボタンを押せば開発用Linuxを導入できるだろう。 また各種Debian化キットなどもシリアルコンソールの世話になることなく導入できるのではないだろうか。
https://w.atwiki.jp/aerocats/pages/21.html
日経Linux2007年5月号(56ページ)より以下抜粋。 Linuxを形作るファイルは、役割ごとに/binや/homeなどあらかじめ定められたディレクトリに並んでいます。設定に関するファイルは/etc(スラエトセと読む)にあります。Linux自体の起動設定、ネットワーク設定、表示設定、個別のアプリケーション設定など、多岐にわたりますが、すべてがテキスト・ファイル形式で収められています。 テキストファイルで各種の設定 /etcには「設定」と名がつく作業に必要なファイルが集められている。 Linuxのありとあらゆるシステム設定に欠かせないファイルがあるため、新しいプログラムをインストールしても「/etcに設定ファイルがあるだろう」と容易に想像がつく。 FHSとの比較 標準Linux・開発用Linuxの/etc(スラエトセ)ディレクトリをFHSが定めた内容と比較してみる。 FHS 標準Linux 開発用Linux 設定内容 /etc/opt × /optに関する設定。 (/etc/X11) × X Window Systemに関する設定。 (/etc/sgml) × SGMLに関する設定。 (/etc/xml) × XMLに関する設定。 csh.login × Cシェルがログイン時に参照。 exports × NFSクライアントにアクセスを許す共有ディレクトリの一覧。 fstab ○ ファイルシステムのマウントポイント。 ftpusers × FTPアクセスを禁止するユーザー一覧。 gateways × 動的経路を設定するroutedコマンド?が参照。 gettydefs × loginコマンド?を呼び出すgettyコマンド?が通信速度と端末の設定時に参照。 group ○ ユーザーグループの定義。 host.conf × 名前解決(DNS)の際の優先順位を定義。 hosts ○ 名前解決のためのホスト名、IPアドレス設定。 hosts.allow × xinetd?経由で起動するサーバーのアクセス可能ホストを定義。 hosts.deny × xinetd?経由で起動するサーバーのアクセス拒否ホストを定義。 hosts.equiv × 外部からのリモートアクセスを許可するか否かを設定。 hosts.lpd × 外部からのリモートアクセスによる印刷を許可するか否かを設定。 inetd.conf × ポートを監視するinetd?に対象ポートと、アクセスを発見した場合に起動するプログラムを指示。 inittab ○ 起動時のランレベル?などを定義。 issue ○ ローカルログイン時の表示メッセージ。 id.so.conf × 共有ライブラリ?の検索パスを定義。 motd × コンソールログイン時の表示メッセージ。 mtab ○ マウント中のファイルシステム一覧。 mtools.conf × MS-DOSのディスクにアクセスするmtoolsコマンド群の設定。 networks × ブート時に用いるホスト名、IPアドレスの対応情報。 passwd ○ ユーザー名、ユーザーIDなどを記録。 printcap × プリンタの設定。 profile ○ ログイン時にbash?が参照・実行する設定。 protocols × プロトコルのデータベースであり、IPヘッダーに含まれるプロトコル種別を示す数値と特定のプロトコルを結び付ける。 resolv.conf ○ ホスト名とIPアドレスにおける名前解決の設定。 rpc × RPC(Remote Procedure Call)に用いるサーバー名とプロトコル番号の一覧。 securetty × rootがログインできるターミナルを指定。 services ○ ネットワークサービス名と利用ポート、プロトコルの対応を定義。 shells × ログインシェルとして利用可能なシェルを記述。 syslog.conf ○ ログデーモンであるsyslog?の設定。 ※引用「日経Linux2007年5月号(59ページ)」(日経BP社)